package B.链表;

public class _203_移除链表元素 {
    /**
     * 自解：返回值无法确定
     * 参考题解--哨兵节点哨兵节点去解决它，哨兵节点广泛应用于树和链表中，如伪头、伪尾、标记等，它们是纯功能的，通常不保存任何数据，其主要目的是使链表标准化，如使链表永不为空、永不无头、简化插入和删除
     *在这里哨兵节点将被用于伪头
     * 该方法不需要判断头结点空不空
     *
     * @param head
     * @param val
     * @return
     */
    public ListNode removeElements(ListNode head, int val) {
        //哨兵节点-------
        ListNode sentinel = new ListNode(0);
        sentinel.next = head;

        ListNode pre= sentinel;
        ListNode cur = head;
        while(cur != null){
            if(cur.val == val){
                cur = cur.next;
                pre.next = cur;
            }else {
                pre = cur;
                cur = cur.next;
            }
        }

        return  sentinel.next;
    }

    }
